package com.xm.proxy;

/**
 * Java动态代理 实现InvocationHandler接口
 *   基于 Java 反射 API，通过实现接口生成代理类。
 * cglib动态代理 实现MethodInterceptor接口
 *   CGLIB 通过 Enhancer 生成目标类的子类（如 UserService$$EnhancerByCGLIB$$xxx）。
 *   子类重写父类非 final、非 static 方法，并在方法中调用拦截器的 intercept 方法。
 */
public class DogTest {
    public static void main(String[] args) {
        Dog dog = (Dog) JavaProxyFactory.getProxy(new WangCai());
        dog.info();
        dog.run();

        System.out.println("-------------------------------------");

        Dog dog3 = (Dog) CglibProxyFactory.getProxy(new XiaoBai());
        dog3.info();
        dog3.run();
    }
}
